2020-2021 Sunseeker Telemetry and Lighting System
flashctl_ex4_writeToInfoA.c
Go to the documentation of this file.
1 /* --COPYRIGHT--,BSD
2  * Copyright (c) 2017, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  * --/COPYRIGHT--*/
32 //*****************************************************************************
55 //********************************************************************************
56 #include "driverlib.h"
57 
58 //*****************************************************************************
59 //
60 //INFOB address in flash into which calibration data would be written
61 //
62 //*****************************************************************************
63 #define INFOA_START (0x1980)
64 
65 //*****************************************************************************
66 //
67 //Dummy char array of 'calibration data' - to be stored in flash
68 //
69 //*****************************************************************************
70 uint8_t calibration_data_char[16] = {0x00,
71  0x01,
72  0x02,
73  0x03,
74  0x04,
75  0x05,
76  0x06,
77  0x07,
78  0x08,
79  0x09,
80  0x10,
81  0x11,
82  0x12,
83  0x13,
84  0x14,
85  0x15};
86 //*****************************************************************************
87 //
88 //Dummy int array of 'calibration data' - to be stored in flash
89 //
90 //*****************************************************************************
91 uint16_t calibration_data_int[8] = {0x1617,
92  0x1819,
93  0x2021,
94  0x2223,
95  0x2425,
96  0x2627,
97  0x2829,
98  0x3031};
99 //*****************************************************************************
100 //
101 //Dummy long array of 'calibration data' - to be stored in flash
102 //
103 //*****************************************************************************
104 uint32_t calibration_data_long[4] = {0x35343332,
105  0x39383736,
106  0x43424140,
107  0x47464544};
108 
109 void main (void)
110 {
111  uint16_t status;
112 
113  WDT_A_hold(WDT_A_BASE);
114 
115  //Set P1.0 to output direction
116  GPIO_setAsOutputPin(
117  GPIO_PORT_P1,
118  GPIO_PIN0
119  );
120 
121  //Unlock Info Segment A
122  FlashCtl_unlockInfoA();
123 
124  do
125  {
126  //Erase INFOA
127  FlashCtl_eraseSegment((uint8_t *)INFOA_START);
128  status = FlashCtl_performEraseCheck((uint8_t *)INFOA_START,
129  128
130  );
131  } while (status == STATUS_FAIL);
132 
133  //Write calibration data to INFOA
134  FlashCtl_write8(calibration_data_char,
135  (uint8_t *)INFOA_START,
136  16
137  );
138  FlashCtl_write16(calibration_data_int,
139  (uint16_t *)(INFOA_START + 16),
140  8
141  );
142  FlashCtl_write32(calibration_data_long,
143  (uint32_t *)(INFOA_START + 32),
144  4
145  );
146  FlashCtl_fillMemory32(0xBEEFBEEF,
147  (uint32_t *)(INFOA_START + 48),
148  (128 - 48) >> 2
149  );
150 
151  //Lock Info Segment A
152  FlashCtl_lockInfoA();
153 
154  while (1)
155  {
156  //Toggle P1.0
157  GPIO_toggleOutputOnPin(
158  GPIO_PORT_P1,
159  GPIO_PIN0
160  );
161 
162  //Delay
163  __delay_cycles(1000000);
164  }
165 }
uint32_t calibration_data_long[4]
void main(void)
#define INFOA_START
uint8_t calibration_data_char[16]
uint16_t calibration_data_int[8]
#define STATUS_FAIL
Definition: hw_memmap.h:23
__delay_cycles(500000)
uint16_t status